
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>常见消息中间件对比 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>常见消息中间件对比 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是消息中间件（MOM）？它的核心作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">消息中间件是一种软件基础设施，用于在分布式系统的不同组件之间传递数据和消息。它提供异步消息传递机制，允许应用程序通过消息队列通信而无需直接相互调用，从而实现系统解耦、异步通信、数据分发和负载均衡。</div>
          </div>
          <div class="card-source">来源: 消息中间件的定义和作用 -> 定义</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">文档中提到了消息中间件的六大作用，请列举它们。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 系统解耦；2. 异步通信；3. 负载均衡；4. 消息持久化；5. 事件驱动架构；6. 跨平台支持。</div>
          </div>
          <div class="card-source">来源: 消息中间件的定义和作用 -> 作用</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">Apache Kafka 在架构设计上有哪些突出特点以保证其高可用性和扩展性？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Kafka 采用分布式架构，其核心特点是分区和副本机制。每个主题（Topic）可以分为多个分区，每个分区又可以有多个副本存储在不同节点上，以此来确保数据的高可用性和容错能力。同时，它支持通过增加Broker节点来横向扩展集群的处理能力。</div>
          </div>
          <div class="card-source">来源: 区别对比 -> 1. Apache Kafka -> 架构特点 / 扩展性</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">RabbitMQ 是如何实现其灵活的消息路由功能的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">RabbitMQ 通过其核心组件——交换机（Exchange）、队列（Queue）和绑定（Binding）——来实现灵活的消息路由。它支持多种交换机类型，如 Direct, Fanout, Topic, Headers，这使得消息可以根据不同的规则被路由到指定的队列。</div>
          </div>
          <div class="card-source">来源: 区别对比 -> 2. RabbitMQ -> 消息模型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Apache Pulsar 在架构上最显著的特点是什么？这一特点带来了什么优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Apache Pulsar 最显著的特点是其分层架构，它将存储和计算分离。这种设计提供了更高的灵活性和可扩展性。此外，它还原生支持多租户和命名空间，便于资源隔离和管理。</div>
          </div>
          <div class="card-source">来源: 区别对比 -> 4. Apache Pulsar -> 架构特点</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">为了满足复杂的业务需求，RocketMQ 提供了哪些灵活的消息模型？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">RocketMQ 支持多种灵活的消息模型，包括顺序消息、延时消息和事务消息，以满足不同的业务场景需求。</div>
          </div>
          <div class="card-source">来源: 常见的消息中间件 -> 5. RocketMQ -> 特点</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">Apache ActiveMQ 在数据持久化方面提供了哪些存储选项？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Apache ActiveMQ 支持两种主要的数据持久化方式：一种是将消息持久化到磁盘，以支持高可靠性；另一种是将消息存储到关系数据库中，这样便于进行数据管理和查询。</div>
          </div>
          <div class="card-source">来源: 区别对比 -> 3. Apache ActiveMQ -> 数据持久化</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">RabbitMQ 提供了哪些机制来保障消息的可靠传递？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">为了保障消息的可靠性，RabbitMQ 支持消息确认（acknowledgement）和重试机制。此外，它还提供了死信队列（Dead-Letter Queue）机制，用于处理无法正常投递的消息异常和错误情况。</div>
          </div>
          <div class="card-source">来源: 区别对比 -> 2. RabbitMQ -> 可靠性保障</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">根据文档，Kafka 和 RocketMQ 在适用场景上有哪些共同点和不同点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">共同点是它们都适用于实时数据分析和微服务通信。不同点在于，Kafka 的典型场景还包括日志收集和监控以及数据流处理；而 RocketMQ 的典型场景更侧重于订单处理系统和金融交易系统。</div>
          </div>
          <div class="card-source">来源: 常见的消息中间件 -> 1. Apache Kafka / 5. RocketMQ -> 适用场景</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
